package com.aac.rfcrabbitmvc.service;

import com.aac.rfcrabbitmvc.manager.RfcManager;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoParameterList;
import org.json.JSONObject;

import java.util.List;
import java.util.Map;

public interface BpmToSapService {

    /**
     * @param map 前端请求体中携带的Json数据
     * @return 返回result给响应体
     */
    Map<String, Object> getSapJson(Map<String, Object> map);

    /**
     * 根据请求体中的client或searchKey获取连接SAP的RFCManager
     * @param map 请求体携带的Json数据
     * @return RfcManager
     * @throws Exception
     */
    RfcManager getRfcManager(Map<String, Object> map) throws Exception;

    /**
     * 根据searchKey获取对应的sap配置
     * @param searchKey 值为QAS_800, QAS_900
     * @return SAP配置信息
     */
    JSONObject getSAPConfigBySearchKey(String searchKey);

    /**
     * 根据client获取对应的sap配置
     * @param client 值为800, 900, 200
     * @return SAP配置信息
     */
    JSONObject getSAPConfigByClient(String client);

    /**
     * @param name "client" or "SearchKey"
     * @param value 对应的值
     * @return
     */
    JSONObject getSAPConfig(String name, String value);

    /**
     * 设置SAP普通入参
     * @param inputParamMap SAP普通入参Map，从前端请求体中获取。
     * @param importParameterList SAP普通入参集合，由function获取。
     */
    void setNormalInput(Map<String, String> inputParamMap, JCoParameterList importParameterList);

    /**
     * 设置SAP table入参
     * @param inputTableMap SAP普通入参Map，从前端请求体中获取。
     * @param tableParameterList SAP table类型入参集合，由function获取。
     */
    void setTableInput(Map<String, Map<String, String>> inputTableMap, JCoParameterList tableParameterList);

    /**
     * @param result 返还给响应体的JSON数据
     * @param outputParamNameList 输出参数名集合，从前端请求体中获取。
     * @param function JCoFunction类型，已经在设置完入参后执行过
     */
    void setNormalOutput(Map<String, Object> result, List<String> outputParamNameList, JCoFunction function);

    /**
     * @param result 返还给响应体的JSON数据
     * @param outputTableMap 输出table Map，从前端请求体中获取。
     * @param function JCoFunction类型，已经在设置完入参后执行过
     */
    void setTableOutput(Map<String, Object> result, Map<String, List<String>> outputTableMap, JCoFunction function);

}
